//package com.tencent.sr.bizmid.activity.asset.test;
//
//import com.alibaba.fastjson.JSON;
//import com.alibaba.fastjson.JSONArray;
//import com.alibaba.fastjson.JSONObject;
//import com.qcloud.Module.Base;
//import com.qcloud.QcloudApiModuleCenter;
//import java.io.BufferedReader;
//import java.io.File;
//import java.io.FileInputStream;
//import java.io.InputStream;
//import java.io.InputStreamReader;
//import java.util.HashMap;
//import java.util.Iterator;
//import java.util.LinkedHashMap;
//import java.util.Map;
//import java.util.Optional;
//import java.util.Random;
//import java.util.TreeMap;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//import org.springframework.util.StringUtils;
//import org.yaml.snakeyaml.Yaml;
//
//
//import java.nio.charset.Charset;
//
//@Component
//@Slf4j
//public class AutoEnv {
//
//    private static Random rand = new Random();
//
//    /**
//     * 自动加载配置
//     */
//    public static void autoLoad() {
//        try {
//            Map<String, String> envConfigMap = loadEnvConfigYaml();
//            String testType = envConfigMap.getOrDefault("test.type", "");
//            if (testType.equals("tsf")) {
//                Map<String, String> tsfConfigMap = loadTSFConfig(envConfigMap);
//                if (tsfConfigMap != null) {
//                    setSystemPropertyIfAbsent(tsfConfigMap);
//                }
//            }
//            if (testType.equals("consul")) {
//                Map<String, String> consulConfigMap = loadConsulConfig(envConfigMap);
//                if (consulConfigMap != null) {
//                    setSystemPropertyIfAbsent(consulConfigMap);
//                }
//            }
//        } catch (Exception ex) {
//            log.error("AutoEnv.autoLoad throw Exception : ", ex);
//        }
//    }
//
//    /**
//     * 加载腾讯云的TSF配置
//     *
//     * @param envConfigMap EnvConfig.yml 中的配置map
//     * @return 返回腾讯云动态拉下来的配置map
//     * @throws Exception
//     */
//    private static Map<String, String> loadTSFConfig(Map<String, String> envConfigMap) throws Exception {
//        Map<String, String> map = null;
//        String key = envConfigMap.getOrDefault("test.tsf.key", "");
//        String keyPath = envConfigMap.getOrDefault("test.tsf.keyPath",
//                System.getProperty("user.home") + "/.tsf");
//
//        if (StringUtils.isEmpty(key)) {
//            log.warn("key is empty");
//            return null;
//        }
//
//        String keyFilePath = String.format("%s/%s", keyPath, key);
//
//        Map<String, String> keyMap = loadLocalKeyFile(keyFilePath);
//
//        String sId = keyMap.getOrDefault("SID", "");
//        String sKey = keyMap.getOrDefault("SKEY", "");
//        String appName = envConfigMap.getOrDefault("test.tsf.appName", "");
//        String serviceName = envConfigMap.getOrDefault("test.tsf.serviceName", "");
//        String namespace = envConfigMap.getOrDefault("test.tsf.namespace", "");
//        String clusterId = envConfigMap.getOrDefault("test.tsf.clusterId", "");
//        String region = envConfigMap.getOrDefault("test.tsf.region", "");
//
//        if (StringUtils.isEmpty(sId)
//                || StringUtils.isEmpty(sKey)
//                || StringUtils.isEmpty(appName)
//                || StringUtils.isEmpty(serviceName)
//                || StringUtils.isEmpty(namespace)
//                || StringUtils.isEmpty(clusterId)
//                || StringUtils.isEmpty(region)) {
//            log.warn("TSF config some key's value is empty");
//            return null;
//        }
//
//        map = getTkeEnv(appName, sId, sKey, serviceName, namespace, clusterId, region);
//        return map;
//    }
//
//    /**
//     * 加载腾讯云的TSF配置
//     *
//     * @param envConfigMap EnvConfig.yml 中的配置map
//     * @return 返回腾讯云动态拉下来的配置map
//     * @throws Exception
//     */
//    private static Map<String, String> loadConsulConfig(Map<String, String> envConfigMap) throws Exception {
//        Map<String, String> map = null;
//        String key = envConfigMap.getOrDefault("test.consul.key", "");
//        String keyPath = envConfigMap.getOrDefault("test.consul.keyPath", System.getProperty("user.home"));
//
//        if (StringUtils.isEmpty(key)) {
//            log.warn("key is empty");
//            return null;
//        }
//
//        String keyFilePath = String.format("%s/%s", keyPath, key);
//
//        Map<String, String> keyMap = loadLocalKeyFile(keyFilePath);
//
//        String consulIp = keyMap.getOrDefault("consul.ip", "");
//        String consulPort = keyMap.getOrDefault("consul.port", "");
//
//        map = new HashMap<>();
//        map.put("spring.cloud.consul.host", consulIp);
//        map.put("spring.cloud.consul.port", consulPort);
//        return map;
//    }
//
//    /**
//     * 读取 test模块下 resource目录下的 EnvConfig.yml 配置文件
//     *
//     * @return 返回配置的map结构
//     */
//    private static Map<String, String> loadEnvConfigYaml() {
//        Map<String, String> allMap = new HashMap<>();
//        try {
//            Yaml yaml = new Yaml();
//            InputStream inputStream = AutoEnv.class.getClassLoader().getResourceAsStream("EnvConfig.yml");
//            Iterator<Object> result = yaml.loadAll(inputStream).iterator();
//            while (result.hasNext()) {
//                Map map = (Map) result.next();
//                iteratorYml(allMap, map, null);
//            }
//        } catch (Exception ex) {
//            log.error("Read config EnvConfig.yml failed ,throw exception", ex);
//        }
//        return allMap;
//    }
//
//    /**
//     * 奖品yaml配置转换成map配置
//     *
//     * @param allMap    所有的map
//     * @param map       yml的map
//     * @param parentKey 当前的父级别key
//     */
//    private static void iteratorYml(Map<String, String> allMap, Map map, String parentKey) {
//        Iterator iterator = map.entrySet().iterator();
//        while (iterator.hasNext()) {
//            Map.Entry entry = (Map.Entry) iterator.next();
//            Object key2 = entry.getKey();
//            Object value = entry.getValue();
//            if (value instanceof LinkedHashMap) {
//                if (parentKey == null) {
//                    iteratorYml(allMap, (Map) value, key2.toString());
//                } else {
//                    iteratorYml(allMap, (Map) value, parentKey + "." + key2.toString());
//                }
//            }
//            if (value instanceof String) {
//                if (parentKey == null) {
//                    allMap.put(key2.toString(), value.toString());
//                }
//                if (parentKey != null) {
//                    allMap.put(parentKey + "." + key2.toString(), value.toString());
//                }
//            }
//        }
//    }
//
//
//    private static class Ccs extends Base {
//        public Ccs() {
//            this.serverHost = "ccs.api.qcloud.com";
//        }
//    }
//
//    /**
//     * 加载TSF key 文件，改key文件可以参考  https://iwiki.woa.com/pages/viewpage.action?pageId=188155412
//     *
//     * @param filePath key 文件path，支持自定义路径
//     * @return 返回配置的key-value
//     * @throws Exception
//     */
//    private static Map<String, String> loadLocalKeyFile(String filePath) throws Exception {
//        Map<String, String> keyMap = new HashMap<>();
//        File file = new File(filePath);
//        if (file.exists() && file.isFile()) {
//            InputStreamReader isr = new InputStreamReader(new FileInputStream(file), Charset.forName("UTF-8"));
//            BufferedReader bufferedReader = new BufferedReader(isr);
//            String line = null;
//            while ((line = bufferedReader.readLine()) != null) {
//                String[] arr = line.split("=");
//                if (arr != null && arr.length >= 2) {
//                    keyMap.put(arr[0].trim(), arr[1].trim());
//                }
//            }
//            bufferedReader.close();
//            isr.close();
//        }
//        return keyMap;
//    }
//
//    /**
//     * 动态读取TSF 中的配置数据
//     *
//     * @param appName     应用名
//     * @param sId         腾讯云 secretId
//     * @param sKey        腾讯云 secretKey
//     * @param serviceName 服务名称
//     * @param namespace   服务命名空间
//     * @param clusterId   clusterId
//     * @param region      地域
//     * @return 返回腾讯云 TSF 配置
//     * @throws Exception
//     */
//    private static Map<String, String> getTkeEnv(String appName, String sId, String sKey, String serviceName,
//            String namespace, String clusterId, String region) throws Exception {
//        Map<String, String> envMap = new HashMap(16);
//        Ccs ccs = new Ccs();
//        TreeMap<String, Object> treeMap = new TreeMap();
//        treeMap.put("Timestamp", System.nanoTime());
//        treeMap.put("Nonce", Math.abs(rand.nextInt()));
//        QcloudApiModuleCenter qcloudApiModuleCenter = new QcloudApiModuleCenter(ccs, treeMap);
//        qcloudApiModuleCenter.setConfigDefaultRegion(region);
//        qcloudApiModuleCenter.setConfigRequestMethod("GET");
//        qcloudApiModuleCenter.setConfigSecretId(sId);
//        qcloudApiModuleCenter.setConfigSecretKey(sKey);
//        TreeMap<String, Object> params = new TreeMap();
//        params.put("clusterId", clusterId);
//        params.put("serviceName", serviceName);
//        params.put("namespace", namespace);
//        String describeClusterServiceInfo = qcloudApiModuleCenter.call("DescribeClusterServiceInfo", params);
//        JSONObject jsonObject = JSON.parseObject(describeClusterServiceInfo);
//        Optional<JSONObject> first = jsonObject.getJSONObject("data").getJSONObject("service").
//                getJSONArray("containers").stream().map((item) -> {
//            return (JSONObject) item;
//        }).filter((item) -> {
//            return item.getString("image").indexOf(appName) > 0;
//        }).findFirst();
//        if (first.isPresent()) {
//            JSONArray envs = ((JSONObject) first.get()).getJSONArray("envs");
//            Iterator iterator = envs.iterator();
//
//            while (iterator.hasNext()) {
//                Object env = iterator.next();
//                JSONObject env1 = (JSONObject) env;
//                envMap.put(env1.getString("name"), env1.getString("value"));
//            }
//        }
//
//        return envMap;
//    }
//
//    private static void setSystemPropertyIfAbsent(Map<String, String> map) {
//        Optional.ofNullable(map).ifPresent(m -> m.forEach((key, value) -> {
//            if (StringUtils.isEmpty(System.getProperty(key))) {
//                System.setProperty(key, value);
//            }
//        }));
//
//    }
//}
